如今升入高中,面对日益繁重的课业负担,制作一个错题本已经变得越来越有必要,但是因为如同书海一般的作业,每天坚持整理错题已经变成了一种奢望,所以我就想到能不能做一款学习纠错的app。
这个项目旨在能解决传统手工记错中存在的效率低、精确度低、费时耗力、难以坚持的弱点,利用网络微数据库,实现现代化、无纸化的错题整理,让人容易养成每日整理错题的好习惯 ,可以同时对各个科目进行整理,也可以随时随地对错题进行重做与反思。
其中的创新点有:
1.无论题目多少都可以一键查看错题。
2.可以在任意场合随时对错题进行重做与反思。
3.效率高,精确度高,省力省时
4.操作方便,仅需一部手机即可实现。
目 录
序言…….......................................................3
§1.1 选题由来……………………………………………………..3
§1.2 开发流程……………………………………………………..3
§1.3 开发环境……………………………………………………..3
§1.4功能介绍………………………………………………………...3
核心代码………………………………………………….4
§2.1出题系统………………………………………………………….4
§2.2错题管理系统………………………………………………….8
§2.3错题输入系统………………………………………………….11
§2.4做题系统…………………………………………………………14.
结论与展望……………………………………………..24
参考文献…………………………………………………………………..24
§1.1选题由来
如今升入高中,面对日益繁重的课业负担,在同学与老师的推荐下,我一直想制作一个错题本,可是每次制作都是半途而废,每每看到自己做到一半却又弃置的错题本,心中总有一种说不出的滋味,所以我就希望能够自己制作一款软件,帮助自己养成每天整理错题的好习惯。
虽然有老师的指导,但是在最关键的编程的过程中,仍然是困难重重,为了管理我的错题,需要用到微数据库,技术性的难题阻挡了我前进的脚步,为此,我研读了《人人都能开发安卓APP——App Inventor 2运用实战》、《可视化开发Android应用程序——拼图开发模式App Inventor2》、《App Inventor 2中文版开发实战:Android智能应用开发前传》等文献进行学习,再经过自己的不断调试,我成功在新浪的SAE的Python的环境下搭建了一个网络微数据库。
§1.2开发流程
1.调查大家的实际需求
2.查阅相关书籍解决技术问题
3.编写程序
§1.3开发环境
开发网站:app.gzjkw.net
开发软件:App Inventor 2
§1.4功能介绍
可以将错题以特定格式的Excel输入存入手机中
可以在任意场合随时对错题进行重做与反思。
无论多少错题都可以一键查看
§2.1出题系统
本项目自己建立了网络微数据库,在新浪SAE的Python环境下搭建。首先在数据库中新建数据表test,字段名tag,类型为varchar(255),字段名vaule,类型为longtext。
变量表
图1 变量模块
图二 用户界面
如果选择注册,则输入新出题者昵称,如果选择登陆,则输入已有出题者账号
如果注册,则出题者账号等于昵称加随机码,保证账号唯一性,防止网络数据库因相同标签而覆盖储存值。接着输入新账号的密码,。如果登陆,则输入已有出题者账号。
如果注册,则打开网络微数据库的数据表test,关闭屏幕并打开对应的错题管理页面,如果登陆,则查询出题者的密码是否正确。
获取已有出题者的密码,它在tag为出题者对应记录的value是列表的第一项,如果查询密码等于刚输入的密码,则关闭屏幕,打开出题者对应的试卷管理页面。
用户界面
§2.2错题管理系统
变量表
变量模块
出题者赋值为Screen1的传值,标题显示出题者信息,查询出题者对应的试卷列表。
试卷列表记录出题者的密码及所出的所有试卷名称,试卷列表第1项是出题者密码,因此从第二项开始,将试卷列表的试卷名称赋值到局部变量列表中,列表显示框显示列表内容。
如果试卷名称不为空,则在试卷第二项处插入新增试卷名称,第一项仍为出题者密码,在网络微数据库中建立空试卷,即内容为“暂无试题”,标签命名为出题者加试卷名称,表明该试卷是哪个出题者所有。将试卷列表保存在网络微数据库,覆盖原有数据。
当数据储存完毕,马上进行数值查询,验证网络微数据库是否储存成功,结果将在列表显示框中显示。
选择试卷
退出错题管理
用户界面
§2.3错题输入系统
变量表
变量模块
出题者赋值为Screen2传值的第一项,试卷编号赋值为Screen2传值的第二项再加1,试卷名称赋值为Screen2传值的第三项。标题显示试卷名称,查询试卷,获取试题信息。
每次刷新列表显示框前先清空试题列表,试卷内容第一项是字段名,从第二项起获取试题信息,将每道试题的第一项(题号)及第二项(问题),合并文本添加
试题列表中,最后用列表显示框显示试题列表
如果试题列表为空,则读取文件,试题列表不为空则询问是否覆盖原试卷内容。
将CSV文本转换为列表,赋值给试卷内容,试卷内容保存到网络微数据库中,标签命名为出题者加试卷名称,表明该试卷是哪位出题者所有。
当数据存储完毕,马上进行数值查询,验证网络微数据库是否存储成功,结果将在列表显示框中显示
若选择导入试题,则覆盖原试卷内容。若选择删除试卷,则将原试卷内容储存为“试题已删”,存储值仍为列表格式。删除试卷后,则获取出题者所出试卷列表,从中确定删除的试卷名称清除。
删除试卷
先获取出题者原有的试卷内容,将试卷编号对应的试卷名称从试卷列表中删除,将新的试卷列表保存到出题者网络微数据库。
如果试卷删除成功,则关闭屏幕,打开出题者对应的Screen2
当列表显示框选择完成,根据出题者、试卷名称及试题编号打开对应的“试题详情”页面
当手机“返回”键被点击,关闭屏幕并返回Screen2
用户界面
§2.4做题系统
主要组件
变量模块
变量表
试卷题量赋值为试卷内容的长度,如果是空试卷则调用“无试题”过程,如果试卷不空,则调用“初始化答案列表”过程,显示对应试题详情,并检查题号是否达到边界。
只显示“无试题”,隐藏其他内容,提交状态设为true,表示可以退出答题。
试卷内容第一项是字段名,第二项起才是试题列表,获取试题内容,生成正确答案列表,最后初始化我的答案列表,每项为空。
试题内容赋值为试卷内容中指定题号的全部内容并显示题型、分值、题号及问题
如果图片路径不为空,则显示画布,画布背景图片为图片路径,否则隐藏画布
如果题型是单选题,则显示选择题布局及选择题按钮布局,否则隐藏
如果题型是填空题,则显示填空题布局,否则隐藏。最后赋值本题“我的答案”与“正确答案
定义过程“检查”,检查试题编号是否达到边界,从而控制“上一题”及“下一题”按钮的启用与否
如果没有达到左边边界,则显示上一题,如果没有达到右边边界,则显示下一题
选择题提交答案
填空题提交答案
交卷并显示成绩
结论与展望
经过长时间的开发和修改,我已完善至多个版本,并且还可以不断改进。我给同学们使用了这款APP,老师也表示这款软件对于整理错题十分方便,同学表示这款APP中的功能新颖,十分有用。以后的生活中发现各种小问题时他们都会提出,我则再通过编写新的功能继续完善这款软件。在以后的开发中,我还会继续改进,并将数据库的使用更完善达到最好的效果。
参考文献
【1】黄仁祥,金琦, 易伟. 人人都能开发安卓APP——App Inventor 2运用实战[M]. 机械工业出版社, 第1版,2014,100-105.
【2】王向辉,张国印,沈洁编著. 可视化开发Android应用程序——拼图开发模式App Inventor2[M].清华大学出版社, 第2版,2015.
【3】王寅峰. App Inventor 2中文版开发实战:Android智能应用开发前传[M].电子工业出版社, 第1版 ,2015.
【4】伦纳德理查德森 (Leonard Richardson) (作者), 麦克阿蒙森 (Mike Amundsen) (作者), 赵震一 (注译, 译者), 李哲 (注译, 译者). RESTful Web APIs中文版[M].电子工业出版社, 第1版,2014.
| 变量名 | 类型 | 初始值 | 功能 | 
| 出题者 | 字符串 | 空 | 出题者账号 | 
| 密码 | 字符串 | 空 | 出题者密码 | 
| 操作 | 字符串 | 空 | 出题者操作是注册还是登陆 | 
| 变量名 | 类型 | 初始值 | 功能 | 
| 出题者 | 字符串 | 空 | 出题者账号 | 
| 试卷列表 | 列表 | 空 | 出题者所出的试卷列表 | 
| 变量名 | 类型 | 功能 | 
| 出题者 | 字符串 | 出题者账号 | 
| 试卷列表 | 列表 | 出题者所出的试卷列表 | 
| 试卷编号 | 整型 | 试卷列表中的编号 | 
| 试卷名称 | 字符串 | 试卷名称 | 
| 试卷内容 | 列表 | 包含字段名的试卷列表 | 
| 试题列表 | 列表 | 不含字段名的试卷列表 | 
| 操作 | 字符串 | 出题者操作是导入试题还是删除试卷 | 
| 类型 | 名称 | 重要初始属性 | 功能 | 
| 标签 | 题型 | 文本:题型 | 显示题型 | 
| 标签 | 分值 | 文本:分值 | 显示分值 | 
| 标签 | 题目 | 文本:题目 | 显示题目 | 
| 画布 | 画布 | 高度:150像素 | |
| 宽度:200像素 | 显示图片 | ||
| 垂直布局 | 选择题布局 | 宽度:充满 | 显示各选项 | 
| 标签 | A选项 | 文本:A | 显示A选项 | 
| 标签 | B选项 | 文本:B | 显示B选项 | 
| 标签 | C选项 | 文本:C | 显示C选项 | 
| 标签 | D选项 | 文本:D | 显示D选项 | 
| 标签 | 正确答案 | 文本:正确答案 | |
| 显示状态:false | 显示正确答案 | ||
| 标签 | 我的答案 | 文本:我的答案 | 显示我的答案 | 
| 水平布局 | 填空题布局 | 宽度:充满 | 填空题答题模块 | 
| 输入框 | 填空题答案 | 提示:请输入答案 | 输入填空题答案 | 
| 按钮 | 填空题确定 | 文本:确定 | 提交填空题答案 | 
| 水平布局 | 选择题按钮布局 | 宽度:充满 | 选择题答题模块 | 
| 按钮 | 按钮A | 文本:A | 提交A选项 | 
| 按钮 | 按钮B | 文本:B | 提交B选项 | 
| 按钮 | 按钮C | 文本:C | 提交C选项 | 
| 按钮 | 按钮D | 文本:D | 提交D选项 | 
| 水平布局 | 翻页布局 | 宽度:充满 | 翻页和交卷 | 
| 按钮 | 上一题 | 文本:上一题 | 显示上一题 | 
| 按钮 | 下一题 | 文本:下一题 | 显示下一题 | 
| 按钮 | 交卷 | 文本:交卷 | 提交试卷 | 
| 对话框 | 交卷对话框 | 无 | 与做题者交互 | 
| 对话框 | 退出对话框 | 无 | 与做题者交互 | 
| 网络微数据库 | 网络微数据库 | 服务地址:1.lzbd.sinaapp.com | 保存试卷信息 | 
| 变量名 | 类型 | 初始值 | 功能 | 
| 出题者 | 字符串 | 空 | 出题者账号 | 
| 试卷名称 | 字符串 | 空 | 试卷名称 | 
| 试卷内容 | 列表 | 空 | 包含字段名的试题列表 | 
| 试卷题量 | 整型 | 0 | 试卷的总题量 | 
| 试卷编号 | 整型 | 0 | 试卷中试题的编号 | 
| 试卷内容 | 列表 | 空 | 试题的详细信息 | 
| 题型 | 字符串 | 空 | 根据题型显示选择题或填空题答题模块 | 
| 我的答案列表 | 列表 | 第一项 为“我的答案” | 记录做题者的答案 | 
| 正确答案列表 | 列表 | 第一项为“正确答案” | 记录正确答案 | 
| 得分 | 整型 | 0 | 答题得分 | 
| 提交状态 | 布尔型 | False | 根据提交状态确定是否能退出答题 |